import numpy as np
import matplotlib.pyplot as plt

# 设置支持中文的字体，这里以'SimHei'为例。如果你使用其他字体，请替换font_name中的字体名称。
font_name = 'SimHei'  # 或者使用你系统中的其他中文字体名

# 更新matplotlib的字体属性，使得其支持中文显示
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = [font_name]

# 如果需要支持负号(-)的正常显示，可以添加以下配置
plt.rcParams['axes.unicode_minus'] = False

# 参数设置
S0 = 100 # 初始股价
mu = 0.12 # 年化回报率
sigma = 0.3 # 年化波动率
T = 1 # 到期时间（年）
N = 252 # 一年的交易日数（时间步数）
dt = T / N # 时间步长

# 生成布朗运动的增量
# np.random.seed(42) # 保证结果可复现
dW = np.random.normal(0, np.sqrt(dt), N)

#计算累积的 W_t
W = np.cumsum(dW)

# 计算时间序列
t = np.linspace(0, T, N)

# 模拟股票价格路径
S = S0*np.exp((mu - 0.5*sigma**2)*t + sigma*W)

# 绘图
plt.figure(figsize=(10, 6))
plt.plot(t, S, label='股票价格路径', linewidth=1.5)
plt.title('几何布朗运动模拟：股票价格路径 (1年)')
plt.xlabel('时间 (年)')
plt.ylabel('股价 (元)')
plt.grid(True, alpha=0.3)
plt.legend()
plt.show()

